import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv, } from 'vite'
import type{ ConfigEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import Components from 'unplugin-vue-components/vite'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
import {primaryColor_hex} from "./src/theme/config"

import {
  AntDesignVueResolver,
  // ElementPlusResolver,
  // VantResolver,
} from 'unplugin-vue-components/resolvers'

// 各部分打包体积的可视化分析
import { visualizer } from 'rollup-plugin-visualizer'

// 配置项文档：https://vitejs.dev/config/
export default defineConfig(({ command, mode }:ConfigEnv) => {

  const env = loadEnv(mode, process.cwd(), '')


  return {
    define: {
      'process.env': env
    },
    plugins: [
      vue(),
      vueJsx(),
      vueSetupExtend(),     // 使得支持setup标签的name属性作为组件的name
      // 组件的按需以及自动导入
      Components({
        resolvers: [
          AntDesignVueResolver({   // 支持antdvue的自动及按需导入
            importStyle: "less"   // boolean | 'css' | 'less'
          }),
        ],
        dts: true,
      }),
      // ElementPlus({
      //   // options
      //   useSource:false,   // 为true时倒入scss文件的样式
      // }),
      visualizer({
        emitFile: true,//是否被触摸
        filename: "buildAnalysis.html",//生成分析网页文件名
        open: true,//在默认用户代理中打开生成的文件
        gzipSize: true,//从源代码中收集 gzip 大小并将其显示在图表中
        brotliSize: true,//从源代码中收集 brotli 大小并将其显示在图表中
      }),
    ],
    build: {
       /** 打包后静态资源目录 */
       assetsDir: 'static',
      /** 消除打包大小超过 500kb 警告 */
      chunkSizeWarningLimit: 2000,
      minify: 'terser',
      terserOptions: {
        compress: {
          //生产环境时移除console和debug。webpack项目可以使用babel-plugin-transform-remove-console
          // drop_console: false,
          drop_console: true,
          drop_debugger: true,
        },
        format: {
          /** 删除注释 */
          comments: false
        }
      },
    },
    css: {
      preprocessorOptions: {
        less: {    // 修改less变量，以修改antdvue的主题色
          javascriptEnabled: true,
          charset: false,
          modifyVars: {
            'primary-color': primaryColor_hex,
            'link-color': primaryColor_hex,
            'border-radius-base': '2px',

          }
        },
      }
    },
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
        'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',   // 去除 vue-i18n抛的警告
      }
    },
    server: {
      /** 端口号，范围为:0-65535*/
      port: 1314,
      /** 是否自动打开浏览器 */
      open: true,
      host:true,
      proxy: {
        //   "/":{          
        //     rewrite: (path) => path.replace(/^\/dev\/api/,''),  // 重写路径
        //     target:"http://localhost:5000" ,    //代理服务器请求的目标服务器
        //     changeOrigin:true,
        //     ws:true,                 //用于支持websocket
        // },            
        "/dev/api": {
          rewrite: (path) => path.replace(/^\/dev\/api/, ''),  // 重写路径
          target: "http://localhost:5000",    //代理服务器请求的目标服务器
          changeOrigin: true,
          ws: true,                 //用于支持websocket
        },
        "/dev/api1": {
          // pathRewrite:{'^/dev/api1':''}, 
          rewrite: (path) => path.replace(/^\/dev\/api1/, ''),
          target: "http://localhost:5001",
          changeOrigin: true,
          ws: true,
        },
      }
    }
  }
})
